查看原文
其他

精通Linux系列十八:用户及其环境变量

拾叁 更AI 2023-10-21

精通Linux系列点击关注公众号,AI&编程干货及时送达   


用户及其环境变量

命令含义
logname打印你的登录名。
whoami打印你当前的有效用户名。
id打印用户的ID和用户的组成员身份。
who列出已登录的用户,长格式输出。
users列出已登录的用户,短格式输出。
finger打印关于用户的信息。
last确定某人上次登录的时间。
printenv打印你的环境变量。

logname

你是谁?只有系统确切知道。这个程序包可以告诉你所有关于用户的信息:他们的名字,登录时间,和他们环境的属性。

stdin  stdout  - file  -- opt  --help  --version

logname

logname(登录名)命令可以打印出你的登录名(这可能看起来很微不足道,但是在shell脚本中却很有用):

 logname
smith

如果这个命令在你的系统中不能工作,试试以下命令:

 echo $LOGNAME

whoami

stdin  stdout  - file  -- opt  --help  --version

whoami

whoami(我是谁)命令可以打印出当前有效的用户名。如果你使用了sudo命令,这个用户名可能会与你的登录名(logname的输出)有所不同。这个例子可以区分whoamilogname

 logname
smith
 sudo logname
smith
 whoami
smith
 sudo whoami
root

id

stdin  stdout  - file  -- opt  --help  --version

id [options] [username]

每个用户都有一个唯一的,数值型的用户ID,以及一个唯一的,数值型的默认组ID。id(身份)命令可以打印出这些值以及他们关联的用户名和组名:

 id
uid=500(smith) gid=500(smith)
groups=500(smith),6(disk),490(src),501(cdwrite)

常用选项

-u打印有效的用户ID并退出。
-g打印有效的组ID并退出。
-G打印用户属于的所有其他组的ID。
-n打印名字(对于用户和组)而不是数字ID。必须与-u-g, 或者 -G一起使用。例如,id -Gn产生的输出与groups(组)命令相同。
-r打印登录值而不是有效值。必须与-u-g, 或者 -G一起使用。

who

stdin  stdout  - file  -- opt  --help  --version

who [options] [filename]

who(谁)命令列出所有已登录的用户,每行一个用户的shell:

 who
smith    pts/0    Sep  6 17:09 (:0)
barrett  pts/1    Sep  6 17:10 (10.24.19.240)
jones    pts/2    Sep  8 20:58 (192.168.13.7)
jones    pts/4    Sep  3 05:11 (192.168.13.7)

通常,who从文件*/var/run/utmp获取数据。filename参数可以指定不同的数据文件,如/var/log/wtmp用于过去的登录或/var/log/btmp*用于失败的登录。

常用选项

-H打印一行标题作为第一行。
--lookup对于远程登录的用户,打印来源的主机名。
-u也打印每个用户在他/她的终端的空闲时间。
-T也指示每个用户的终端是否可写(参见"即时消息"中的mesg)。加号表示"是",减号表示"否",问号表示"未知"。
-m只显示关于你自己的信息(即,与当前终端相关的用户)。
-q快速显示用户名,以及用户的数量。像users(用户)命令,但是会添加一个数量。

users

stdin  stdout  - file  -- opt  --help  --version

users [filename]

users(用户)命令打印有登录会话的用户的快速列表(如果一个用户正在运行多个shell,她会出现多次):

 users
barrett jones smith smith smith

who命令一样,users默认读取*/var/log/utmp*,但可以从另一个提供的文件中读取。

finger

stdin  stdout  - file  -- opt  --help  --version

finger [options] [user[@host]]

finger(信息)命令以短格式打印已登录用户的信息:

 finger
Login     Name             Tty   Idle  Login Time
smith    Sandy Smith     :0          Sep  6 17:09
barrett  Daniel Barrett  :pts/1  24  Sep  6 17:10
jones    Jill Jones      :pts/2      Sep  8 20:58

或者以长格式:

 finger smith
Login: smith                       Name: Sandy Smith
Directory: /home/smith             Shell: /bin/bash
On since Sat Sep  6 17:09 (EDT) on :0
Last login Mon Sep  8 21:07 (EDT) on pts/6 from web1
No mail.
Project:
Enhance world peace
Plan:
Mistrust first impulses; they are always right.

*user参数可以是本地用户名,也可以是远程用户,格式为user@host*。只有在远程主机配置为响应finger请求时,远程主机才会做出响应。

有用的选项

-l以长格式打印。
-s以短格式打印。
-p不显示项目和计划部分,这些部分通常分别从用户的*/.project和/.plan*文件中读取。

last

stdin stdout - file -- opt --help --version

last [选项] [用户] [终端]

last命令按时间倒序显示登录历史:

 last
bob pts/3 localhost 周一 9 21:07 - 21:08 (00:01)
sue pts/6 :0        周一 9 20:25 - 20:56 (00:31)
bob pts/4 myhost    周日 7 22:19 仍然登录
...

您可以提供用户名或终端名称来限制输出。

有用的选项

-*N*仅打印最新的*N行输出,其中N*是正整数。
-i显示IP地址而不是主机名。
-R不显示主机名。
-x还显示系统关闭和系统运行级别的更改(例如,从单用户模式切换到多用户模式)。
-f filename从与*/var/run/wtmp*不同的数据文件中读取;有关更多详细信息,请参阅who命令。

printenv

stdin stdout - file -- opt --help --version

printenv [环境变量]

printenv命令打印您的Shell已知的所有环境变量及其值:

 printenv
HOME=/home/smith
MAIL=/var/spool/mail/smith
NAME=Sandy Smith
SHELL=/bin/bash
...

或仅打印指定的变量:

 printenv HOME SHELL
/home/smith
/bin/bash

推荐阅读

··································

你好,我是拾叁,7年开发老司机、互联网两年外企5年。怼得过阿三老美,也被PR comments搞崩溃过。这些年我打过工,创过业,接过私活,也混过upwork。赚过钱也亏过钱。一路过来,给我最深的感受就是不管学什么,一定要不断学习。只要你能坚持下来,就很容易实现弯道超车!所以,不要问我现在干什么是否来得及。如果你还没什么方向,可以先关注我,这里会经常分享一些前沿资讯和编程知识,帮你积累弯道超车的资本。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存